\Verb+char *strncpy (char* strTo, const char* strFrom, size_t n);+\\
kopiuje co najwyżej {\tt n} znaków z {\tt strFrom} do {\tt strTo} ze znakiem \verb+'\0'+;
jeżeli {\tt strFrom} ma mniej znaków, to dopełnia {\tt strTo} znakami \verb+'\0'+;
zwraca  {\tt strTo}.

{\bf Uwaga.} Metoda nie dopisuje \Verb+'\0'+ na końcu (które byłoby $(n+1)$-ym znakiem).
Pozwala to zmieniać określoną ilość znaków w środku łańcucha bez jego kończenia.

Plik {\sf strncpy.c}.
\begin{lstC}
#include "strdruk.h"

#ifdef __cplusplus
#include <cstring>
#include <cstdlib>
#include <cstdio>
#else
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#endif

#define SIZE 10

int main(void) {
  char sour[] = "Hello"; 
  char *dest;
    
  dest = (char*) malloc(sizeof *dest * (SIZE));
  drukPoZnaku(sour);
  
  // copy LESS chars than source
  strncpy(dest, sour, 1);
  
  fprintf(stdout, "After strncpy (char* strTo, const char* strFrom, size_t n)\n");
  drukPoZnaku(dest);
  
  // copy MORE chars than source
  strncpy(dest, sour, 8);
  
  fprintf(stdout, "After strncpy (char* strTo, const char* strFrom, size_t n)\n");
  drukPoZnaku(dest);
	
  free(dest);
}
\end{lstC}

Uruchomienie.
\begin{lstV}
[0] = 'H'
[1] = 'e'
[2] = 'l'
[3] = 'l'
[4] = 'o'
[5] = NULL
After strncpy (char* strTo, const char* strFrom, size_t n)
[0] = 'H'
[1] = '''
[2] = 'L'
[3] = NULL
After strncpy (char* strTo, const char* strFrom, size_t n)
[0] = 'H'
[1] = 'e'
[2] = 'l'
[3] = 'l'
[4] = 'o'
[5] = NULL
\end{lstV}